package com.sky.chapter1;

/**
 * @author : wushikai
 * <p>
 * date : 2021-03-30
 */

/**
 * Description: 查看线程的所有状态
 *
 * @author : XiaoHeMa
 * CreateDate: 2020/10/24 9:03
 */

public class ThreadState {


    public static void main(String[] args) throws InterruptedException {


        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("---thread线程结束---");

        });

        //查看线程的状态

        Thread.State state = thread.getState();

        //这时候我们只是创建了个线程 也就是NEW的状态

        System.out.println("线程状态  " + state);

        //启动线程

        thread.start();
        state = thread.getState();

        //这时候我们已经启动了线程， 现在线程的状态 RUNNABLE

        System.out.println("线程状态  " + state);

        //根据线程的状态来停止死循环

 /*      while (state != Thread.State.TERMINATED) {
           try {
               Thread.sleep(200);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }

           //查看线程的状态
           state = thread.getState();
           System.out.println("线程状态  " + state);

       }*/


        //根据线程的总条数来停止死循环

        while (true) {

            int i = Thread.activeCount();

            System.out.println("目前线程数量：" + i);

            /**
             * Monitor Ctrl-Break这个线程只会在IDEA中被打印出来;  在IDEA中通过debug启动的不会出现，只有run启动的会出现
             * 所以在idea中执行run的时候这个要写成2而不能是1在eclipse 中却不会出现这个问题，这是软件引起的在开发调试过程要注意
             */

            if (i == 2) {

                break;
            }

            Thread.sleep(200);
            //查看线程的状态
            state = thread.getState();
            System.out.println("线程状态  " + state);

        }

    }

}